# 正常场景测试数据
import time
import sys, os
import yaml
BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))
if sys.platform == "win32":
    pic_dir = os.path.join(BASE_DIR, 'TestDatas/').replace('/', '\\')
else:
    pic_dir = os.path.join(BASE_DIR, 'TestDatas/')
path = 'D:\PycharmProjects\python_api_framework\TestDatas\PersonalcodeDatas\personalcode_para.yml'

def get_yaml(sub):
    with open(path, encoding="utf-8") as f:
        # 不写sub就获取yml的所有内容，写就获取yml的二级数据目录
        if sub is None:
            return yaml.safe_load(f)
        else:
            return yaml.safe_load(f)[sub]
print(get_yaml('add'))
print('-------------------------------------------------')
from string import Template

def template( path, data, sub=None):
    """
    使用模板技术，把yml文件中的变量进行二次转化，是本框架的yml文件的技术基础
    :param path: 模板技术输入yml文件相对路径
    :param data: data是需要修改的模板变量的字典类型
    :param sub: sub是对yml的数据进行二次提取，等于是一个大字典，再提取下一层的小字典，为了让一个yml文件可以有多个接口数据
    :return:
    """
    with open(path, encoding="utf-8") as f:
        if sub is None:
            '''
            不需要对数据进行二次提取，Template(f.read()).substitute(data)先替换变量
            yaml.safe_load把yml格式的字符串变成dict类型返回
            '''
            return yaml.safe_load(Template(f.read()).safe_substitute(data))
        else:
            '''
            由于Template需要替换全部的变量，有漏的就会报错，先写Template(f.read()).substitute(data)
            就会报错，data只对sub下一层的数据改，并没有改其他层的数据，肯定会报错
            需要先yaml.safe_load(f)[sub]提取到下一层的数据，但由于是dict
            要通过yaml.dump转化成yml格式的字符串，经过Template来改变变量，最后在yaml.safe_load转化成dict

            '''
            return yaml.safe_load(Template(yaml.dump(yaml.safe_load(f)[sub])).safe_substitute(data))
data = template(path, {"codeName": '123'})
print(data['add'])
            # 错误的写法：return yaml.safe_load(Template(f.read()).substitute(data))
# success_data = [
#     {'query':
#          {'errCode': 0, 'errMsg': "success"},
#      'edit':
#          {'name': '员工活码-修改活码', 'codeName': 'pytest-修改-' + str(time.strftime("%Y-%m-%d")), 'autoAccept': 1,
#               'channelName': '2', 'img': pic_dir + '1.jpg', 'msg': '更新成功'},
#      'del':
#          {'name': '员工活码-删除活码', 'msg': '成功删除'},
#      },
# ]
#
# # 异常场景测试
# error_data = [
#     {'add': {'name': '员工活码-新建活码', 'codeName': 'pytest-' + str(time.strftime("%Y-%m-%d")), 'autoAccept': 1,
#              'channelName': '2', 'img': pic_dir + '1.jpg', 'msg': '新建成功'},
#      'edit': {'name': '员工活码-修改活码', 'codeName': '', 'autoAccept': 1,
#               'channelName': '2', 'img': pic_dir + '1.jpg', 'msg': '更新成功1'},
#      'del': {'name': '员工活码-删除活码', 'msg': '成功删除'},
#      },
# ]
